home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
pao
/
towns
/
paolib
/
sample
/
fdchk.c
< prev
next >
Wrap
Text File
|
1991-10-18
|
3KB
|
110 lines
/******************************************************************************
**
** ドライブ 0 , 1 <フロッピィ> の状態をチェックするプログラム
**
** < History >
** 1989.11.18 : CREATE
**
** < note > : TABS = 4
**
** Programmed by Y.Hirata ( Nifty ID : NAB03321 )
**
******************************************************************************/
pragma Off (Floating_point) ;
#include <dos.h>
#include <stdio.h>
#include "hc.h"
#define DEBUG 0
union REGS regs ;
/******************** ドライブステータス情報の取り出し *********************/
char dstatus( char dno )
{
/*
** デバイス番号
** _7_6_5_4_3_2_1_0_
** | | | | | | | | |
** ~~~~~~~~~~~~~~~~~
** |-------| : ドライブ番号 ( 0 ~ 15 )
** |-------| : デバイス
** FPD = 0010 <02H>
*/
if ( dno < 0 || dno > 15 ) {
printf( "Drive No.(%d) ERROR\n",dno ) ;
return( FALSE ) ;
}
regs.h.ah = 0x02 ;
regs.h.al = DEV_FD | dno ;
regs.h.ch = 0 ;
int86( 0x93,®s,®s ) ;
#if DEBUG
printf( "\n<dstatus> drive no. = %d\n",dno ) ;
printf( "\n== int 93h function 02h ==\n" ) ;
printf( "returns...\n" ) ;
printf( "AH (return code) : AH=%#x\n",regs.h.ah ) ;
printf( "AL (drive mode <HD>) : AL=%#x\n",regs.h.al ) ;
printf( "DL (drive status <FD>) : DL=%#x\n",regs.h.dl ) ;
printf( "BX (max Block No. -High- <HD>) : BX=%#x\n",regs.x.bx ) ;
printf( "DX (max Block No. -Low - <HD>) : DX=%#x\n",regs.x.dx ) ;
printf( "CX (error information) : CX=%#x\n\n",regs.x.cx ) ;
#endif
if ( regs.h.ah ) /* エラー */
return( regs.x.cx ) ;
else /* 正常終了 */
return( regs.h.dl ) ;
}
/**************************** ★ メイン ★ *********************************/
void main()
{
char c, st ;
for ( c=0; c<3; c++ ) {
printf( "\nDRIVE %d STATUS..............\n",c ) ;
st = dstatus( c ) ;
if ( c == 1 && DRV_single() ) {
printf( "シングルドライブモードになっています.\n" ) ;
} else if ( (st & 0x01) == 0x01 ) {
printf( "フロッピィがセットされていません!\n" ) ;
} else {
printf( "フロッピィは、" ) ;
if ( (st & 0x02) == 0x02 ) {
printf( "書き込み不可\n" ) ;
} else {
printf( "書き込み可\n" ) ;
}
/*-------------------------*/
printf( " " ) ;
if ( (st & 0x04) == 0x04 ) {
printf( "両面\n" ) ;
} else {
printf( "片面\n" ) ;
}
/*-------------------------*/
printf( " " ) ;
if ( (st & 0x10) == 0x10 ) {
printf( "2D/2DD\n" ) ;
} else {
printf( "2HD\n" ) ;
}
/*-------------------------*/
printf( " " ) ;
if ( (st & 0x80) == 0x80 ) {
printf( "単密度\n" ) ;
} else {
printf( "倍密度\n" ) ;
}
printf( "となっています。\n" ) ;
}
}
}